/*
 * ArenaTicketMain - Venda de Bilhetes Eletronicos para Espetaculos (Arena Entretenimento S.A.)
 * PagamentoDAOMySQL.java
 * ©2006
 */

package br.unicamp.ic.inf312.arena.persistencia.dao.impl;

import java.sql.SQLException;

import br.unicamp.ic.inf312.arena.modelo.vendas.CartaoCredito;
import br.unicamp.ic.inf312.arena.modelo.vendas.Pagamento;
import br.unicamp.ic.inf312.arena.modelo.vendas.ValeEntrada;
import br.unicamp.ic.inf312.arena.persistencia.dao.IPagamentoDAO;
import br.unicamp.ic.inf312.framework.persistencia.SQLUtil;

/**
 * @author  inf312
 */
public class PagamentoDAOMySQL implements IPagamentoDAO {

	/**
	 * @param CartaoCredito
	 * @return boolean  
	 */
	public boolean inserir(CartaoCredito cartao) throws Exception {
		int result = 0;
		if (cartao != null) {
		    Object[] params = new Object[4];
		    params[0] = Pagamento.TIPO_CARTAO;
		    params[1] = cartao.getValor();
		    params[2] = cartao.getNumeroCartao();
		    params[3] = cartao.getBandeira();

		    StringBuffer stbQuery = new StringBuffer();
		    stbQuery.append(" INSERT INTO ");
		    stbQuery.append(SQLUtil.getDbSchema() + "."
			    + IPagamentoDAO.TABELA_BD + " (");
		    //
		    stbQuery.append(IPagamentoDAO.COLUMN_TIPO 			+ ", ");
		    stbQuery.append(IPagamentoDAO.COLUMN_VALOR 			+ ", ");
		    stbQuery.append(IPagamentoDAO.COLUMN_NUMERO_CARTAO  + ", ");
		    stbQuery.append(IPagamentoDAO.COLUMN_BANDEIRA 		+ ") ");
		    stbQuery.append(" VALUES (?, ?, ?, ?) ");
		    //
		    result = SQLUtil.update(stbQuery.toString(), params);
		}
		return (result > 0 ? true : false);
	}

	/**
	 * @param ValeEntrada
	 * @return boolean   
	 */
	public boolean inserir(ValeEntrada vale) throws Exception {
		int result = 0;
		if (vale != null) {
		    Object[] params = new Object[4];
		    params[0] = Pagamento.TIPO_VALE_ENTRADA;
		    params[1] = vale.getValor();
		    params[2] = vale.getValidade();
		    params[3] = vale.getEstorno().getNumero();

		    StringBuffer stbQuery = new StringBuffer();
		    stbQuery.append(" INSERT INTO ");
		    stbQuery.append(SQLUtil.getDbSchema() + "."
			    + IPagamentoDAO.TABELA_BD + " (");
		    //
		    stbQuery.append(IPagamentoDAO.COLUMN_TIPO 			+ ", ");
		    stbQuery.append(IPagamentoDAO.COLUMN_VALOR 			+ ", ");
		    stbQuery.append(IPagamentoDAO.COLUMN_VALIDADE 		+ ", ");
		    stbQuery.append(IPagamentoDAO.COLUMN_NUMERO_ESTORNO + ") ");
		    stbQuery.append(" VALUES (?, ?, ?, ?) ");
		    //
		    result = SQLUtil.update(stbQuery.toString(), params);
		}
		return (result > 0 ? true : false);
	}

	/**
	 * @return int
	 */
	//TODO: checar synchronized
	public synchronized int obterCodPagto() throws Exception {
		int result = 0;
		try {
			StringBuffer stbQuery = new StringBuffer();
			stbQuery.append(" SELECT MAX(" + IPagamentoDAO.COLUMN_CODIGO_PK
					+ ") FROM " + SQLUtil.getDbSchema() + "."
					+ IPagamentoDAO.TABELA_BD);

			result = SQLUtil.selectCount(stbQuery.toString());
		} catch (SQLException e) {
			throw new Exception(e.getLocalizedMessage());
		}
		return result;
	}
}